/**
 * @author 徐楠
 * @date 2022/2/2 19:54
 * @version 1.0
 */

package com.xunan.likou;

/**
 * 以 V 字型为一个循环, 循环周期为 n = (2 * numRows - 2) （2倍行数 - 头尾2个）。
 * 对于字符串索引值 \color{red}ii，计算 x = i % n 确定在循环周期中的位置。
 * 则行号 \color{blue}yy = min(x, n - x)。
 */
public class ZGlyphTransformation {
    public static void main(String[] args) {

        String result = convert("PAHNAPLSIIGYIR", 4);
        System.out.println(result);

    }

    public static String convert(String s, int numRows) {
        if (numRows == 1) return s;
        StringBuilder[] rows = new StringBuilder[numRows];
        for (int i = 0; i < numRows; i++) {
            rows[i] = new StringBuilder();
        }
        //一个V形一共几个数
        int amount = 2 * numRows - 2;
        for (int i = 0; i < s.length(); i++) {
            int line = i % amount;
            //行号取Math.min(line, amount - line)  极其巧妙之处
            rows[Math.min(line, amount - line)].append(s.charAt(i));
        }
        //String result = String.join("", rows);
        String result = "";
        for (int i = 0; i < numRows; i++) {
            result = result + rows[i].toString();
        }
        return result;
    }
}
